﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using estudent.Models;

namespace estudent.Controllers
{
    public class BrisanjeRokaController : Controller
    {
        estudentEnt db = null;
        IEnumerable<SProfesorji> profesorji = null;


        //
        // GET: /BrisanjeRoka/

        public ActionResult Index()
        {
            db = new estudentEnt();
            string role = Session["Role"].ToString();

            if (role.CompareTo("refe") == 0)
            {
                profesorji = from p in db.SProfesorjis
                             orderby p.priimekProfesor ascending
                             select p;
                ViewData["profesorji"] = profesorji;
            }
            else
            {
                int profesor = Int32.Parse(Session["Name"].ToString());
                ViewData["profesor"] = "neprazno";

                profesorji = from p in db.SProfesorjis
                             where p.sProfesor == profesor
                             select p;
                ViewData["profesorji"] = profesorji;

                var predmeti = db.Poucujes.Where(p => p.sProfesor1 == profesor || p.sProfesor2 == profesor || p.sProfesor3 == profesor)
                .Select(g => g);
                ViewData["predmeti"] = predmeti;
            }


            return View("BrisanjeRoka");
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public string Poisci(FormCollection form)
        {
            db = new estudentEnt();

            int sifraProf = Int32.Parse(form["profesor"]);

            IEnumerable<Poucuje> predmeti = db.Poucujes.Where(p => p.sProfesor1 == sifraProf || p.sProfesor2 == sifraProf || p.sProfesor3 == sifraProf)
                .Select(g => g);
            string izhod = "<option value=\"prazen\">Izberite predmet</option>";

            foreach (var ele in (IEnumerable<Poucuje>)predmeti)
            {
                izhod += ("<option value=\"" + ele.sPredmeta + "\">" + ele.sPredmeti.imePredmeta + " - " + ele.sPredmeta + "</option>");
            }

            return izhod;
        }

        public string PoisciDatume(FormCollection form)
        {
            db = new estudentEnt();
            long binarno;

            int sifraProf = Int32.Parse(form["profesor"]);
            int sifraPred = Int32.Parse(form["predmet"]);
            bool prijava;

            var leta = db.IzpitniRokis
                .Where(p => p.Poucuje.sPredmeta == sifraPred)
                .Where(p => p.datumRoka >= DateTime.Today)
                .Where(p => p.Poucuje.sProfesor1 == sifraProf || p.Poucuje.sProfesor2 == sifraProf || p.Poucuje.sProfesor3 == sifraProf)
                .Where(p => p.skrit == null || p.skrit == true);

            var prijav = db.PrijaveNaIzpits
                .Where(p => p.IzpitniRoki.Poucuje.sPredmeta == sifraPred)
                .Where(p => p.datumRoka >= DateTime.Today)
                .Where(p => p.IzpitniRoki.Poucuje.sProfesor1 == sifraProf || p.IzpitniRoki.Poucuje.sProfesor2 == sifraProf || p.IzpitniRoki.Poucuje.sProfesor3 == sifraProf)
                .GroupBy(p => new { p.IzpitniRoki.Poucuje.idPoucuje, p.datumRoka })
                .Select(skup => new { sProfesor = skup.Key.idPoucuje, datumRoka = skup.Key.datumRoka, stevilo = skup.Count() });

            string izhod = "<tr><th>Izvajalci</th><th>Datum in ura</th><th>Prijave?</th><th>Izbris?</th></tr>";

            foreach (var ele in (IEnumerable<IzpitniRoki>)leta)
            {
                izhod += "<tr>";
                if (prijav.Any(u => u.datumRoka == ele.datumRoka && u.sProfesor == ele.idPoucuje))
                    prijava = true;
                else
                    prijava = false;

                izhod += "<td>" + ele.Poucuje.SProfesorji1.priimekProfesor + " " + ele.Poucuje.SProfesorji1.imeProfesor;

                if (ele.Poucuje.sProfesor2 != null)
                    izhod += ", " + ele.Poucuje.SProfesorji2.priimekProfesor + " " + ele.Poucuje.SProfesorji2.imeProfesor;

                if (ele.Poucuje.sProfesor3 != null)
                    izhod += ", " + ele.Poucuje.SProfesorji.priimekProfesor + " " + ele.Poucuje.SProfesorji.imeProfesor;

                izhod += "</td>";
                binarno = ele.datumRoka.ToBinary();
                izhod += ("<td>" + String.Format("{0:dd/MM/yyyy HH:mm}", ele.datumRoka) + "</td>");
                if (prijava)
                {
                    izhod += ("<td>Da</td>");
                    izhod += ("<td><a id=\"potrdi\" href='BrisanjeRoka/Brisi/" + ele.idPoucuje + "/" + binarno + "'>Izbriši</a></td>");
                }
                else
                {
                    izhod += ("<td>Ne</td>");
                    izhod += ("<td><a href='BrisanjeRoka/Brisi/" + ele.idPoucuje + "/" + binarno + "'>Izbriši</a></td>");
                }
                izhod += "</tr>";
            }
            return izhod;
        }

        public ActionResult Brisi(int id, string datum)
        {
            db = new estudentEnt();
            try
            {
                DateTime nov = DateTime.FromBinary(long.Parse(datum));

                var brisanje = from p in db.IzpitniRokis
                               where p.idPoucuje == id &&
                               p.datumRoka == nov
                               select p;

                var brisanjePrijav = from p in db.PrijaveNaIzpits
                                     where p.idPoucuje == id &&
                                     p.datumRoka == nov
                                     select p;

                foreach (var prij in brisanjePrijav)
                {
                    db.PrijaveNaIzpits.DeleteObject(prij);
                }

                foreach (var bris in brisanje)
                {
                    db.IzpitniRokis.DeleteObject(bris);
                }

            }
            catch (Exception e)
            {
                ViewData["neki"] = e.Message;
            }

            try
            {
                db.SaveChanges();
            }
            catch (Exception e)
            {
                ViewData["uspeh"] = "Izbris ni bil uspešen. Morda je bil rok že zbrisan. Tehnični podatki napake:" + e.InnerException.Message;
                return View("Odziv");
            }
            ViewData["uspeh"] = "Vnos uspešno izbrisan";

            return View("Odziv");
        }

    }
}
